/*
 * 描          述:  <描述>
 * 修  改   人:  Administrator
 * 修改时间:  2017年3月15日
 * <修改描述:>
 */
package com.tx.component.task.model;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 * 任务状态<br/>
 * <功能详细描述>
 * 
 * @author  Administrator
 * @version  [版本号, 2017年3月15日]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
@Entity
@Table(name = "TD_TASK_STATUS")
public class TaskStatus implements Serializable {
    
    /** 注释内容 */
    private static final long serialVersionUID = -8889771643314376355L;
    
    /** 唯一键 */
    @Id
    private String id;
    
    /** 任务id */
    @Column(updatable = false, nullable = false)
    private String taskId;
    
    /** 任务状态 */
    @Column(nullable = false)
    private TaskStatusEnum status = TaskStatusEnum.WAIT_EXECUTE;
    
    /** 最后一次任务执行结果 */
    private TaskResultEnum result;
    
    /** 最后执行时间：记录最后一次执行的时间 */
    private Date start;
    
    /** 最后执行时间：记录最后一次执行的时间 */
    private Date end;
    
    /** 最后一次陈功执行耗时 */
    private Long consuming;
    
    /** 执行所在机器的签名：根据singnature一致的情况下，才会有权对任务的状态进行重置（暂不提供自动重置）   */
    private String signature;
    
    /** 执行总次数 */
    private int executeCount = 0;
    
    /** 最后一次成功执行时间 */
    private Date successStart;
    
    /** 最后一次成功执行时间 */
    private Date successEnd;
    
    /** 最后一次执行耗时 */
    private Long successConsuming;
    
    /** 成功次数 */
    private int successCount = 0;
    
    /** 执行失败总次数 */
    private int failCount = 0;
    
    /** 最后一次失败执行时间 */
    private Date failStart;
    
    /** 最后一次失败执行时间 */
    private Date failEnd;
    
    /** 最后一次失败执行耗时 */
    private Long failConsuming;
    
    /** attributes */
    private String parameters;
    
    /** 下次执行时间：如果当前时间大于该事件，则事务可以被启动,冗余字段，在attributes中也会记录 */
    //用于锁定重复执行，一旦检测到当前时间未到下次执行时间，或具备业务意义的时间对比该时间，不应该执行，可直接跳过，或抛出异常？
    private Date nextFireDate;
    
    /** 最后更新时间 */
    @Column(nullable = false, updatable = true)
    private Date lastUpdateDate;
    
    /** 创建时间 */
    @Column(nullable = false, updatable = false)
    private Date createDate;
    
    /**
     * @return 返回 id
     */
    public String getId() {
        return id;
    }
    
    /**
     * @param 对id进行赋值
     */
    public void setId(String id) {
        this.id = id;
    }
    
    /**
     * @return 返回 taskId
     */
    public String getTaskId() {
        return taskId;
    }
    
    /**
     * @param 对taskId进行赋值
     */
    public void setTaskId(String taskId) {
        this.taskId = taskId;
    }
    
    /**
     * @return 返回 status
     */
    public TaskStatusEnum getStatus() {
        return status;
    }
    
    /**
     * @param 对status进行赋值
     */
    public void setStatus(TaskStatusEnum status) {
        this.status = status;
    }
    
    /**
     * @return 返回 result
     */
    public TaskResultEnum getResult() {
        return result;
    }
    
    /**
     * @param 对result进行赋值
     */
    public void setResult(TaskResultEnum result) {
        this.result = result;
    }
    
    /**
     * @return 返回 start
     */
    public Date getStart() {
        return start;
    }
    
    /**
     * @param 对start进行赋值
     */
    public void setStart(Date start) {
        this.start = start;
    }
    
    /**
     * @return 返回 end
     */
    public Date getEnd() {
        return end;
    }
    
    /**
     * @param 对end进行赋值
     */
    public void setEnd(Date end) {
        this.end = end;
    }
    
    /**
     * @return 返回 consuming
     */
    public Long getConsuming() {
        return consuming;
    }
    
    /**
     * @param 对consuming进行赋值
     */
    public void setConsuming(Long consuming) {
        this.consuming = consuming;
    }
    
    /**
     * @return 返回 signature
     */
    public String getSignature() {
        return signature;
    }
    
    /**
     * @param 对signature进行赋值
     */
    public void setSignature(String signature) {
        this.signature = signature;
    }
    
    /**
     * @return 返回 executeCount
     */
    public int getExecuteCount() {
        return executeCount;
    }
    
    /**
     * @param 对executeCount进行赋值
     */
    public void setExecuteCount(int executeCount) {
        this.executeCount = executeCount;
    }
    
    /**
     * @return 返回 successStart
     */
    public Date getSuccessStart() {
        return successStart;
    }
    
    /**
     * @param 对successStart进行赋值
     */
    public void setSuccessStart(Date successStart) {
        this.successStart = successStart;
    }
    
    /**
     * @return 返回 successEnd
     */
    public Date getSuccessEnd() {
        return successEnd;
    }
    
    /**
     * @param 对successEnd进行赋值
     */
    public void setSuccessEnd(Date successEnd) {
        this.successEnd = successEnd;
    }
    
    /**
     * @return 返回 successConsuming
     */
    public Long getSuccessConsuming() {
        return successConsuming;
    }
    
    /**
     * @param 对successConsuming进行赋值
     */
    public void setSuccessConsuming(Long successConsuming) {
        this.successConsuming = successConsuming;
    }
    
    /**
     * @return 返回 successCount
     */
    public int getSuccessCount() {
        return successCount;
    }
    
    /**
     * @param 对successCount进行赋值
     */
    public void setSuccessCount(int successCount) {
        this.successCount = successCount;
    }
    
    /**
     * @return 返回 failCount
     */
    public int getFailCount() {
        return failCount;
    }
    
    /**
     * @param 对failCount进行赋值
     */
    public void setFailCount(int failCount) {
        this.failCount = failCount;
    }
    
    /**
     * @return 返回 failStart
     */
    public Date getFailStart() {
        return failStart;
    }
    
    /**
     * @param 对failStart进行赋值
     */
    public void setFailStart(Date failStart) {
        this.failStart = failStart;
    }
    
    /**
     * @return 返回 failEnd
     */
    public Date getFailEnd() {
        return failEnd;
    }
    
    /**
     * @param 对failEnd进行赋值
     */
    public void setFailEnd(Date failEnd) {
        this.failEnd = failEnd;
    }
    
    /**
     * @return 返回 failConsuming
     */
    public Long getFailConsuming() {
        return failConsuming;
    }
    
    /**
     * @param 对failConsuming进行赋值
     */
    public void setFailConsuming(Long failConsuming) {
        this.failConsuming = failConsuming;
    }
    
    /**
     * @return 返回 parameters
     */
    public String getParameters() {
        return parameters;
    }
    
    /**
     * @param 对parameters进行赋值
     */
    public void setParameters(String parameters) {
        this.parameters = parameters;
    }
    
    /**
     * @return 返回 nextFireDate
     */
    public Date getNextFireDate() {
        return nextFireDate;
    }
    
    /**
     * @param 对nextFireDate进行赋值
     */
    public void setNextFireDate(Date nextFireDate) {
        this.nextFireDate = nextFireDate;
    }
    
    /**
     * @return 返回 lastUpdateDate
     */
    public Date getLastUpdateDate() {
        return lastUpdateDate;
    }
    
    /**
     * @param 对lastUpdateDate进行赋值
     */
    public void setLastUpdateDate(Date lastUpdateDate) {
        this.lastUpdateDate = lastUpdateDate;
    }
    
    /**
     * @return 返回 createDate
     */
    public Date getCreateDate() {
        return createDate;
    }
    
    /**
     * @param 对createDate进行赋值
     */
    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
}
